<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>

    // 直接单例模式
    // const obj = {}
    
    // 闭包实现的单例模式
    // const Fn = (function(){
    //     const obj = {};
    //     return function (){
    //         obj.msg = "hello";
    //         return obj;
    //     }
    // })();

    
    // 利用函数自身实现的单例模式
    function Fn(){
        if(!Fn._obj){
            Fn._obj = {};
        }
        Fn._obj.msg = "hello";
        return Fn._obj;
    }

    const f1 = new Fn();
    const f2 = new Fn();

    console.log(f1);
    console.log(f2);
    
    console.log(f2.msg);        // hello

    console.log(f2 === f1);     // true

    // 为什么会产生新对象？new的原理

</script>
</html>